package array;

import java.util.HashSet;
import java.util.Set;

/**
 * @author: june
 * @date: 2023/8/14
 * @description: 345. 反转字符串中的元音字母
 * 给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。
 * <p>
 * 元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现不止一次。
 **/

public class ReverseVowels_345 {
    public String reverseVowels(String s) {
        Set<Character> vowels = new HashSet<>();
        vowels.add('a');
        vowels.add('e');
        vowels.add('i');
        vowels.add('o');
        vowels.add('u');

        // 双指针，第一个指针从头开始向尾遍历，第二个指针从尾开始向头遍历，遇到元音字母就交换
        char[] chars = s.toCharArray();
        int i = 0;
        int j = chars.length - 1;
        while (i < j) {
            // while循环一定要加上对索引的判断，容易越界
            while (!vowels.contains(Character.toLowerCase(chars[i])) && i < j) {
                i++;
            }

            while (!vowels.contains(Character.toLowerCase(chars[j])) && i < j) {
                j--;
            }
            if (i < j) {
                char tmp = chars[i];
                chars[i] = chars[j];
                chars[j] = tmp;
                i++;
                j--;
            }
        }
        return new String(chars);
    }

    public static void main(String[] args) {
        String s = ".,";
        ReverseVowels_345 reverseVowels_345 = new ReverseVowels_345();
        String s1 = reverseVowels_345.reverseVowels(s);
        System.out.println(s1);
    }
}
